הייתי מעוניין לדעת האם ואיך אפשר להתעלם מרווחים וריווחי שורות ב preg_match.
זה הביטוי:
הבעיה היא כאשר אני יורד שורה אחרי ה } וכותב משהו ויורד שורה וכותב }, אז PHP נותנת לי שגיאה, בגלל שאני חייב לכתוב הכל בשורה אחת.
איך אפשר להתעלם מהרווחים?
תודה רבה!
11 תשובות
אז צריך לסמן בביטוי הרגולרי שיהיה תו } ואחריו יכול להיות ויכול שלא להיות תו של מעבר שורה.
תו של מעבר שורה מסמנים ב \n
עשיתי את זה עכשיו:
והשורות זה:
{
background-color: red;
}
וזה עדיין לא מחזיר לי כמו שצריך, עדיין את השגיאה..
זה הקוד:
$this->methods[$matches[1]] = $matches[2];
$text = 'method bla
{
background-color: red;
}';
preg_match("#method \s+ ([a-z0-9]+) [\s\r\n\t]* \{ [\s\r\n\t]* ([^\}]*) [\s\r\n\t]* \}#imsuUx", $text, $matches);
print_r($matches);
תודה, אני צריך ללמוד איך זה פועל.
אבל עכשיו יש לי בעיה כשאני מנסה להכניס הכל למערך, ונגיד יש לי:
{
background-color: red;
}
method blo
{
background-color: red;
}
method ble
{
background-color: red;
}
אני רוצה להכניס את כולם לתוך מערך, מפתח והתוכן שלו.
אני עושה משהו כזה:
$this->methods[$matches[1]] = $matches[2];
וזה לא עובד, כי הוא מבצע את זה פעם אחת, אז בדקתי כמה שורות יש ועשיתי עם לולאה, זה לא עבד, אחר כך הגדלתי את הלולאה ל 20000 פעמים, וזה עדיין לא עבד...
ככה אני עושה את זה:
{
preg_match("#method \s+ ([a-z0-9]+) [\s\r\n\t]* \{ [\s\r\n\t]* ([^\}]*) [\s\r\n\t]* \}#imsuUx", $text, $matches);
$this->methods[$matches[1]] = $matches[2];
}
* אני עכשיו מנסה לעשות את זה עם מערכים דו מימדים ו preg_match_all
יש מצב שאני מצליח, אם לא, אני יכתוב פה.
אחרי שעתיים שלמות ששברתי בהם את הראש, הצלחתי!
תודה על העזרה, זה האתר מספר 1!
intval, אני לא מבין מה עשית שם, אפשר הסבר כדי שאני יוכל לעשות את זה לבד מהראש שלי?
והאם יש איזה ביטוי קצר יותר?
אני מנסה לעשות כזה דבר:
{
blo
}
ואני רוצה להוציא את ה BLA ואת ה BLO, ואני רוצה שלא משנה, גם אם זה יהיה בשורה אחת או בכמה שורות' זה תמיד יקלט.
לפי המדריך הזה
תעבור תו תו ותנסה להבין מה הוא אומר.
אחרי שתסיים - תגיד לי איזה תו בדיוק לא הבנת ממה שכתוב שם :)
הבנתי בערך והצלחתי בערך, אבל בתוך הבלוק יש לי משהו כזה:
{
{test}
color: white;
border: 1px solid black;
}
עכשיו הוא נקטע לפני ה { האחרון אחרי ה test, איך אפשר לסדר שיתעלם ממנו ופשוט יחזיר למערך את זה:
color: white;
border: 1px solid black;
הוא מציג לי עכשיו
זה הביטוי:
תודה רבה!
בעיקרון אי אפשר, באיחוד במקרים שיש לך מחרוזת כמו
{
{..}
}
method blu
{
{ .. }
}
או אפילו כימוס יותר עמוק שבתוך הסוגריים הפנימיות יהיה עוד איזה משהו
בגלל שאתה בביטוי הרגולרי שלך יכול לגרום לו לעצור או ב { הראשון
או ב { האחרון.
אם אתה רוצה שהוא ידלג על סוגריים פנימיים, תצטרך לכתוב לולאה משלך שעוברת תו-תו בטקסט וסופרת כמה סוגריים מסולסלות נפתחו ואחרי זה נסגרו.
אם רמת העומק המירבי הוא 2, כלומר בתוך הסוגריים המסולסלות הפנימיות לא יהיה עוד משהו שיכול להכיל סוגריים מסולסות - אז אפשר לנסות לכתוב ביטוי שמאשר סוגריים מסולסלות ואם היו כאלה, אז חייב להיות עוד סוגר מסולסל אחרי זה.
פשוט נחליף את הסוגריים המסולסלות לרגילות, לא צריך להסתבך יותר מדי עכשיו.
תודה רבה! אם תיהיה לי בעיה אני אכתוב פה.
אפשר להוריד את המודיפיקטור U.